//封装一个AjaxUtil对象
class AjaxUtil {
	constructor() {

	}
	//使用static的修饰的方法 是可以直接用对应的类名.方法名调用
	//请求地址 请求的参数 请求完执行的函数（回调函数）
	//封装get请求
	static get(url, params = {}, callback) {
		//正常的ajax
		let request = new XMLHttpRequest()
		//先进行参数的拼接操作
		for (let key in params) {
			if (url.indexOf('?') != -1) { //如果在对应的url地址里面存在?那么就在后面加&
				url += `&${key}=${params[key]}`
			} else {
				url += `?${key}=${params[key]}`
			}
		}
		//打开一个地址
		request.open('GET', url)
		//发送请求
		request.send()
		//监听对应的请求的状态变化
		request.onreadystatechange = function() {
			//判断 进入条件为当前数据响应成功
			if (request.readyState == 4 && request.status == 200) {
				//接收到对应的数据
				let response = JSON.parse(request.responseText)
				//调用对应的回调函数 将对应的数据传递出去
				callback(response)
			}
		}
	}
	//使用static的修饰的方法 是可以直接用对应的类名.方法名调用
	//请求地址 请求的参数 请求完执行的函数（回调函数）
	//封装post请求
	static post(url, params = {}, callback) {
		//正常的ajax
		let request = new XMLHttpRequest()
		//打开一个地址
		request.open('post', url)
		//先进行参数的拼接操作
		let paramStr = ""
		for (let key in params) {
			if (paramStr == "") {
				paramStr += `${key}=${params[key]}`
			} else {
				paramStr += `&${key}=${params[key]}`
			}

		}
		//设置请求头 Content-type表示的意思你提交的数据是什么类型 以表单方式提交（表单格式 json格式）
		request.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
		//发送请求 post传参 在发送请求的时候携带
		request.send(paramStr)
		//监听对应的请求的状态变化
		request.onreadystatechange = function() {
			//判断 进入条件为当前数据响应成功
			if (request.readyState == 4 && request.status == 200) {
				//接收到对应的数据
				let response = JSON.parse(request.responseText)
				//调用对应的回调函数 将对应的数据传递出去
				callback(response)
			}
		}
	}
	//封装对应的jsonp
	static jsonp({
		url, //请求的地址
		param, //携带的参数 对象
		callback, //执行的回调函数
		callbackName //回调函数参数名
	}) {
		//生成一个回调函数名字
		let fnName = "fn" + Date.now()
		//指定的回调函数名字对应的方法 加给window
		window[fnName] = callback
		//创建script标签
		var script = document.createElement('script')
		//将回调函数 cb=fn加url
		url += `?${callbackName}=${fnName}`
		//将参数对象变成
		for (let key in param) {
			url += `&${key}=${param[key]}`
		}
		//再将对应的url地址给到script标签的src
		script.src = url
		//将srcipt加给body
		document.body.appendChild(script)
		//等待script标签加载完成
		script.onload = function() {
			//将script进行销毁
			script.remove()
			//将window属性删除
			delete window[fnName]
		}
	}
}
